walker93 (Member)
Expert
Messaggi: 460
Iscritto: 31/01/2010
|
mi è sorta una domanda alla quale devo rispondere assolutamente:
tra usare lo IO.stream reader e file.readalltext cosa mi consigliate???
Es. stramreader:
Codice sorgente - presumibilmente VB.NET |
Dim sr As New IO.StreamReader(My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\strane let.txt") While sr.EndOfStream = False TextBox1.Text += sr.ReadLine End While sr.Close()
|
Es. readalltext:
Codice sorgente - presumibilmente Plain Text |
TextBox2.Text = IO.File.ReadAllText(My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\strane let.txt")
|
P.S. io ho sempre usato il secondo... |
|
LittleHacker (Member)
Guru
Messaggi: 1033
Iscritto: 28/04/2009
|
Postato originariamente da walker93:
mi è sorta una domanda alla quale devo rispondere assolutamente:
tra usare lo IO.stream reader e file.readalltext cosa mi consigliate???
Es. stramreader:
Codice sorgente - presumibilmente VB.NET |
Dim sr As New IO.StreamReader(My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\strane let.txt") While sr.EndOfStream = False TextBox1.Text += sr.ReadLine End While sr.Close()
|
Es. readalltext:
Codice sorgente - presumibilmente Plain Text |
TextBox2.Text = IO.File.ReadAllText(My.Computer.FileSystem.SpecialDirectories.MyDocuments & "\strane let.txt")
|
P.S. io ho sempre usato il secondo... |
Beh...x velocità di scrittura(codice) ti consiglio il secondo ma se vuoi una cosa fatta bene io ti consiglio il 1°...
P.S: While sr.EndOfStream = False puoi scriverlo anche(ed è meglio): While Not sr.EndOfStream Ultima modifica effettuata da LittleHacker il 25/02/2010 alle 16:32 |
|
walker93 (Member)
Expert
Messaggi: 460
Iscritto: 31/01/2010
|
ma ho provato sia uno che l'altro
a me sembra che il secondo rispetti la formattazione...
|
|
LittleHacker (Member)
Guru
Messaggi: 1033
Iscritto: 28/04/2009
|
Postato originariamente da walker93:
ma ho provato sia uno che l'altro
a me sembra che il secondo rispetti la formattazione...
|
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Non è questo. E' che ReadLine() legge una linea e restituisce una stringa che la rappresenti, ma senza il carattere a capo in fondo (lo devi aggiungere manualmente).
Astraendo i metodi dal contesto della textbox, potrei fare le seguenti considerazioni:
Sostanzialmente, entrambi i metodi adottano la stessa metodologia: aprono il file, leggono tutte le linee, quindi chiudono il file. Le prestazioni, quindi, non sono poi molto distanti. L'unica cosa che possiamo ipotizzare è che ReadAllText restituisce un'unica stringa e quindi oltre a leggere una linea, deve anche concatenare il testo letto con i nuovi dati. Dato che la concatenazioni di stringhe è un'operazione abbastanza lenta, potrebbe essere leggermente meno veloce del primo. Questo ragionamento vale se ReadAllText usa l'operatore & per la concatenazione. Se supponiamo che utilizzi uno StringBuilder, allora il tempo di concatenazione si riduce sensibilmente, ma si aggiunge il tempo impiegato a convertire i dati in stringa tramite ToString().
Ritornando al contesto corrente, tuttavia, il primo esempio usa anch'esso una concatenazione, sulla proprietà TextBox1.Text. Oltre ad essere poco efficiente poiché si usa l'operatore + (solo minimamente più veloce di &), si tratta di una proprietà, e quindi di un campo mediato da funzione, che implica una chiamata e un'allocazione di memoria per il record di attivazione. Senza contare che la chiamata avviene da un oggetto, che ogni volta deve essere indirizzato nell'heap managed (l'accesso a una variabile globale è meno veloce dell'accesso a una variabile locale, e l'accesso a un oggetto è meno veloce dell'accesso a un dato value).
Forse ho esagerato un pochino
|
|
walker93 (Member)
Expert
Messaggi: 460
Iscritto: 31/01/2010
|
oooook, quindi in poche parole???
|
|